YOLOv10全网最新创新点改进系列:融合混和注意力机制CBAM,进千教程及源关注通道和空间特点,排列助力YOLOv10新模型快速涨点!组合一元1000粉丝抖音网站 所有改进代码均经过实验测试跑通!不重截止发稿时YOLOv10已改进40+!样附自己排列组合2-4种后,详细考虑位置不同后可排列组合上千万种!进千教程及源改进不重样!排列!组合专注AI学术,不重关注B站up主:Ai学术叫叫兽er!样附 购买相关资料后畅享一对一答疑!详细
CBAM注意力提出全文戳这
详细的进千教程及源改进教程以及源码,戳这!排列戳这!组合!一元1000粉丝抖音网站戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!
注意力机制是啥:
神经网路中的注意力机制(Attention Mechanism)是在估算能力有限的情况下,将估算资源分配给更重要的任务,同时解决信息超员问题的一种资源分配方案。在神经网路学习中,一般而言模型的参数越多则模型的抒发能力越强,模型所储存的信息量也越大,但这会带来信息过载的问题。那么通过引入注意力机制,在诸多的输入信息中聚焦于对当前任务更为关键的信息,降低对其他信息的关注度,甚至过滤掉无关信息,就可以解决信息过载问题,并提升任务处理的效率和准确性。
这就类似于人类的视觉注意力机制,通过扫描全局图象,获取须要重点关注的目标区域,而后对这一区域投入更多的注意力资源,获取更多与目标有关的细节信息,而忽略其他无关信息。通过这些机制可以借助有限的注意力资源从大量信息中快速筛选出高价值的信息。
简介
Convolutional Block Attention Module(CBAM):CBAM是一种组合模型,将通道注意力和空间注意力相结合,以提升模型的表现力。
CBAM 模块包括两个注意力子模块:通道注意力模块和空间注意力模块。通道注意力模块用于估算每位通道的重要性,以便更好地分辨不同通道之间的特点。空间注意力模块则用于估算每位象素在空间上的重要性,以便更好地捕捉图象中的空间结构。
通道注意力模块通过对输入特点图在通道维度上进行最大池化和平均池化,然后将这两个池化结果输入到一个全连接层中,最后输出一个通道注意力权重向量。这个向量用于加权输入特点图中的每位通道,从而更好地分辨不同通道的特点。
空间注意力模块通过对输入特点图在通道维度上进行平均池化和最大池化,然后将这两个池化结果输入到一个全连接层中,最后输出一个空间注意力权重张量。这个张量用于对每位象素在空间上进行加权,从而更好地捕捉图象中的空间结构。
在图中,绿色框表示通道注意力模块,橙色框表示空间注意力模块。通过将这两个模块串联上去,可以得到一个完整的 CBAM 模块,用于插入到卷积神经网络中以提高模型性能。
2 实现方式
通道注意力模块的目标是提高每位通道的特点抒发。以下是实现通道注意力模块的步骤:
2.1
全局最大池化和全局平均池化: 对于输入特点图,首先对每位通道执行全局最大池化和全局平均池化操作,计算每位通道上的最大特征值和平均特征值。这会生成两个包含通道数的向量,分别表示每位通道的全局最大特点和平均特点。
2.2
全联接层: 将全局最大池化和平均池化后的特点向量输入到一个共享全联接层中。这个全连接层用于学习每位通道的注意力权重。通过学习,网络可以自适应地决定什么通道对于当前任务愈发重要。将全局最大特点向量和平均特点向相交,得到最终注意力权重向量。
2.3
Sigmoid激活: 为了确保注意力权重坐落0到1之间,应用Sigmoid激活函数来形成通道注意力权重。这些权重将应用于原始特点图的每位通道。
2.4
注意力加权: 使用得到的注意力权重,将它们与原始特点图的每位通道相加,得到注意力加权后的通道特点图。这
3 代码
class ChannelAttention(nn.Module): def __init__(self, in_channels, ratio=16): super(ChannelAttention, self).__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.max_pool = nn.AdaptiveMaxPool2d(1) self.fc = nn.Sequential( # 全连接层 # nn.Linear(in_planes, in_planes // ratio, bias=False), # nn.ReLU(), # nn.Linear(in_planes // ratio, in_planes, bias=False) # 利用1x1卷积代替全连接,避免输入必须尺度固定的问题,并减小计算量 nn.Conv2d(in_channels, in_channels // ratio, 1, bias=False), nn.ReLU(inplace=True), nn.Conv2d(in_channels // ratio, in_channels, 1, bias=False) ) self.sigmoid = nn.Sigmoid() def forward(self, x): avg_out = self.fc(self.avg_pool(x)) max_out = self.fc(self.max_pool(x)) out = avg_out + max_out out = self.sigmoid(out) return out * x
4 结论
我们提出了频域困局注意力模块(CBAM),这是一种提升 CNN 网络表示能力的新方式。 我们通过两个奇特的模块(通道和空间)应用基于注意力的特点细化,并在保持较小开支的同时实现了相当大的性能改进。 对于通道注意力,我们建议使用最大池化特点和平均池化特点,从而形成比 SE [28] 更好的注意力。 我们通过借助空间注意力进一步提升性能。 我们的最终模块(CBAM)学习哪些以及在那里指出或抑制,并有效地细化中间特点。 为了验证其功效,我们使用各类最先进的模型进行了广泛的实验,并确认 CBAM 在三个不同基准数据集上的性能优于所有基线:ImageNet-1K、MS COCO 和 VOC 2007。此外快速买赞,我们还可视化了怎么 该模块确切推测给定的输入图象。 有趣的是,我们观察到我们的模块诱导网路正确地关注目标对象。 我们希望CBAM成为各类网路构架的重要组成部份。
5 修改步骤! 5.1 修改YAML文件
详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!
5.2 新建.py
详细的改进教程以及源码快速买赞,戳这!戳这!!戳这!!!B站:AI学术叫叫兽er 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!
5.3 修改tasks.py
详细的改进教程以及源码,戳这!戳这!!戳这!!!B站:AI学术叫叫兽er 源码在相簿的链接中,动态中也有链接,感谢支持!祝科研遥遥领先!
6、验证是否成功即可
执行命令
python train.py
改完收工!